/**
 * 
 */
package testy.server;

import org.junit.runners.MethodSorters;
import static org.junit.Assert.*;


import org.junit.FixMethodOrder;
import org.junit.Test;






import baduga.server.*;

/**
 * @author Janek
 *
 */
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Test_Serwer {
	
	private Serwer srv = new Serwer();
	private int mode = 0;
	private String name = "Test_1"; //Nazwa gracza
	
	
	
	/***
	 * 
	 * Additional
	 * 
	 */
	
	
	/**
	 * Funkcja szablonowa (Dodawanie gracza)
	 * 
	 * @param name
	 * @return
	 */
	public Object[] cuAddPlayer(String name)
	{
		//Def.
		Player pObj;
		Object[] result;
		
		//Init.
		pObj = new Player(name);
		
		result = srv.addPlayer(pObj);
		
		return result;
	}
	

	
	
	
	
	
	/**
	 * Sprawdzamy fakt dodania
	 * 
	 */
	@Test
	public void t1AddPlayerGD() 
	{
		Object[] result;
		String playerID = "";
		
		
		result = cuAddPlayer(name);
		
		//sprawdzenie czy result pozytywny + pobranie kluczaaa
		if((boolean) result[0])
		{
			playerID =  (String) result[1];
		}
		
		if(mode == 0)
		{
			assertEquals("#1 Dodania gracza o loginie | " + name + " | (Wynik metody)", true, (boolean) result[0]);
			assertNotEquals("#1 Dodania gracza o loginie | " + name + " | (Klucz) ", "", playerID);
		}
		else
		{
			assertEquals("#3 Dodania gracza o loginie | " + name + " | (Wynik metody)", false, (boolean) result[0]);
			assertEquals("#3 Dodania gracza o loginie | " + name + " | (Klucz) ", "", playerID);
		}
	}
	

	/**
	 * Sprawdzamy czy dodany gracz istnieje
	 * 
	 */
	@Test
	public void t2ExistancePlayerGD() {
		//Def.
		
		Player pObj = null;
		Object[] result;
		String playerID= "";
		
		
		result = cuAddPlayer(name);
		
		//sprawdzenie czy result pozytywny + pobranie kluczaaa
		if((boolean) result[0])
		{
			playerID =  (String) result[1];
			
			//Test
			result = srv.getPlayer(playerID);
			
			//sprawdzenie czy result pozytywny + pobranie kluczaaa
			if((boolean) result[0])
			{

				
				
				pObj = (Player) result[1];
			}
		}
		

		if(mode == 0)
		{
			assertEquals(	"#2 Czy istnieje gracz o loginie | " + name + " | (Test wyniku)", true, (boolean) result[0]);
			assertNotEquals("#2 Czy istnieje gracz o loginie | " + name + " | (Test danych wyniku)", null, pObj);
		}
		else
		{
			assertEquals(	"#4 Czy istnieje gracz o loginie | " + name + " | (Test wyniku)", false, (boolean) result[0]);
			assertEquals(   "#4 Czy istnieje gracz o loginie | " + name + " | (Test danych wyniku)", null, pObj);
		}
	}
	
	
	/**
	 * 
	 * Sprawdzamy, czy można dodać 2x tego samego gracza
	 * 
	 */
	@Test
	public void t3AddPlayerFD() {
		t1AddPlayerGD();
		
		//Zmiana pola
		mode = 1;
		
		t1AddPlayerGD(); 
	}
	

	/**
	 * 
	 * Sprawdzamy reakcje metody na fałszywe dane
	 * 
	 */
	@Test
	public void t4ExistancePlayerFD() {


		//Def.
		
		Player pObj = null;
		Object[] result;
		String playerID= "";
		
		
		result = cuAddPlayer(name);
		
		//sprawdzenie czy result pozytywny + pobranie kluczaaa
		if((boolean) result[0])
		{
			//fałszywy token
			playerID =  "bla bla";
			
			//Test
			result = srv.getPlayer(playerID);
			
			//sprawdzenie czy result pozytywny + pobranie kluczaaa
			if((boolean) result[0])
			{

				
				
				pObj = (Player) result[1];
			}
		}
		


		assertEquals(	"#4 Czy istnieje gracz o loginie | " + name + " | (Test wyniku)", false, (boolean) result[0]);
		assertEquals(   "#4 Czy istnieje gracz o loginie | " + name + " | (Test danych wyniku)", null, pObj);
		

	}
	

}
